package com.emm.yixun.estate.service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

import com.emm.yixun.common.model.PmoSaleData;
import com.emm.yixun.common.model.Project;
import com.emm.yixun.common.model.ProjectList;
import com.emm.yixun.common.model.SaleReturnPmo;
import com.emm.yixun.common.model.SalesGroup;
import com.emm.yixun.common.model.User;
import com.emm.yixun.common.model.ZNodes;
import com.emm.yixun.common.model.dto.ProjectDto;
import com.emm.yixun.common.model.dto.ProjectInfoDto;
import com.emm.yixun.common.model.dto.ProjectListDto;
import com.emm.yixun.common.model.dto.ProjectPmoDto;
import com.emm.yixun.common.model.dto.ProjectSettingDto;
import com.emm.yixun.common.model.enums.SaleReturnEnum;
import com.emm.yixun.common.model.pmo.LevelDynamiSalesData;
import com.emm.yixun.common.model.pmo.LevelStaticIndustMark;
import com.emm.yixun.common.model.pmo.LevelStaticIndustMarkParam;
import com.emm.yixun.common.model.pmo.PmoReportDto;
import com.emm.yixun.common.page.Page;
import com.emm.yixun.common.response.Response;
import com.emm.yixun.common.response.ResponseList;

@WebService
public interface ProjectServiceFacade {
	/**
	 * 新增
	 */
	Response<ProjectDto> save(ProjectDto projectDto, ProjectInfoDto projectInfoDto,
			ProjectSettingDto projectSettingDto, ProjectPmoDto projectPmoDto);

	/**
	 * 修改,当selective=true时修改非空列,当selective=false修改所有列
	 */
	Response<Integer> updateByPrimaryKey(ProjectDto dto, Boolean selective);

	/**
	 * 逻辑删除
	 */
	Response<Integer> deleteByPrimaryKey(Long id);

	/**
	 * 主键查询
	 */
	Response<Project> findById(Long id);

	/**
	 * 根据dto查询记录
	 */
	ResponseList<Project> findByDto(ProjectDto dto);

	/**
	 * 根据dto以及分页参数查询记录
	 */
	Page<Project> findPageByDto(ProjectDto dto, Integer begin, Integer row);

	/**
	 * 查询房产树 parentId:父节点ID,当parentId=-1时则查询一级节点 level: 1:项目等级 2:组团等级 3:楼栋等级 4:单元等级 5:房间等级
	 */
	ResponseList<ZNodes> findEstateTree(User user, Long parentId, String level);

	/**
	 * 根据层级获取项目路径
	 * 
	 * @param id
	 *            项目、组团、楼栋、单元ID
	 * @param level
	 *            项目、组团、楼栋、单元
	 * @return
	 */
	public Map<String, String> projectLevelName(long id, String level);

	/**
	 * 分页参数查询记录
	 */
	public Page<ProjectList> getProjectListPage(ProjectListDto entity, Integer begin, Integer pageSize);

	public List<Project> getProjectByUser(User user);

	/**
	 * 报表数据查询权限 功能描述: <br>
	 * 〈功能详细描述〉
	 * 
	 * @param userId
	 * @param resourcesCode
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	ResponseList<SalesGroup> findReportShiro(Long userId, String resourcesCode);

	/**
	 * 方法描述 : 根据项目CODE查询项目对象 创建者：ThinkPad 项目名称： emm-estate-api 类名： ProjectServiceFacade.java 版本： v1.0 创建时间： 2016年11月17日
	 * 下午2:11:58
	 * 
	 * @param projectCode
	 * @return Response<Project>
	 */
	Response<Project> findProjectByCode(String projectCode);

	/**
	 * 查询动态销售数据，用于对接绿城PMO
	 */
	Response<LevelDynamiSalesData> quereyLevelDynamiSalesData(String pmoProjectCode, String month);

	Response<PmoSaleData> queryPmoSaleData(Long projectId, Long premisesId);

	PmoSaleData selPmoSaleData(Long projectId, Long premisesId, String industMark, String isRoom);

	public PmoSaleData queryPmoArae(Long premisesId, String industMark);

	// 分级业态信息汇总
	public Response<LevelStaticIndustMark> levelStaticIndustMarkSum(LevelStaticIndustMarkParam param);

	/**
	 * 
	 * 功能描述: <br>
	 * 〈功能详细描述〉
	 * 
	 * @param projectDto
	 * @param projectPmoDto
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	Response<Boolean> updateProjectAndRoom(ProjectDto projectDto, ProjectPmoDto projectPmoDto);
	
	/**
	 * 
	 * querySaleReturnListPmo:查询项目，或者分期 的哪一年的所有月份的销售指标 或者回款指标<br/>
	 *
	 * @author Administrator
	 * @param projectId
	 * @param premiseId
	 * @param saleReturnEnum
	 * @return
	 * @since JDK 1.6
	 */
	public ResponseList<SaleReturnPmo> querySaleReturnListPmo(Long projectId,Long premiseId,SaleReturnEnum saleReturnEnum,String year) throws Exception;
	/**
	 * 
	 * queryDynamiValue:(项目或者分期,动态货值). <br/>
	 *
	 * @author Administrator
	 * @param projectId
	 * @param premiseId
	 * @return
	 * @since JDK 1.6
	 */
	public HashMap<String, BigDecimal> queryDynamiValue(Long projectId,Long premiseId,String month,String industType);
	
	/**
     * 根据dto查询记录
     */
    ResponseList<Project> getQuestionnaireProject(ProjectDto dto);
    
    
	/**
	 * 
	 * findIndustSalesData:(项目某年，某业态的销售数据). <br/>
	 * @author Administrator
	 * @param projectId
	 * @param year
	 * @return
	 * @since JDK 1.6
	 */
	public Response<PmoReportDto> findIndustSalesData(Long projectId,String year);

	boolean checkPmoPush(String pmoProjectCode);

}
